Core Features

The fundamentals of the IRC experience in HexDroid.

Multi-Network

  • Multiple simultaneous connections
  • Auto-connect on app startup (per network)
  • Reconnect after a device restart, optionally waiting for Wi-Fi rather than using mobile data
  • Auto-reconnect with exponential backoff
  • Auto-join channels with optional keys
  • Post-connect commands with configurable delay
  • Pin/favourite networks to top of list
  • Drag-and-drop network reordering in sidebar and Networks screen

Secure by Default

  • TLS 1.2 / TLS 1.3 (default on)
  • SASL PLAIN, SCRAM-SHA-256, EXTERNAL
  • TLS client certificates (.pem, .crt+.key, or .p12/.pfx)
  • TOFU certificate pinning learns the server SHA-256 fingerprint on first connect, verifies it on every subsequent connect, refuses mismatches with a clear warning
  • TLS session resumption via shared SSLContext cache
  • SASL credentials in EncryptedSharedPreferences
  • Credentials excluded from Android backup
  • End-to-end message encryption AES-256-GCM (+AGM) and Blowfish/FiSH (+OK). Read the encryption guide

Backup & Restore

Character Encoding

  • Auto-detect per message (UTF-8 fallback)
  • Manual encoding per network
  • windows-1251 Russian/CIS
  • KOI8-R older Cyrillic systems
  • ISO-8859-1/15 Western European
  • Any encoding supported by Java's Charset

Bouncer Support

  • Works with soju, ZNC, kiwibnc, pounce and anything following the user/network convention
  • Per-client buffers on ZNC and per-client history on soju, so each device keeps its own read position
  • Native chathistory playback on both
  • /znc and /bouncerserv (alias /bnc) talk to the bouncer directly
  • See Getting Started → Bouncers to set one up

Server-Aware Limits

  • Topic, away, quit and kick text is trimmed to the server's TOPICLEN / AWAYLEN / QUITLEN / KICKLEN before sending
  • History requests respect the server's CHATHISTORY size limit and MSGREFTYPES selectors
  • /knock <#channel> [reason] asks for an invite where the server advertises KNOCK
  • The “too many channels” error reads the server's CHANLIMIT figure
  • Bot users are badged [bot] from the BOT mode letter or the bot message tag

IRCv3 Capabilities

HexDroid negotiates capabilities during the connection handshake, and each one can be switched off per network under IRCv3 Capabilities in network settings. Below cover what you actually see in the app.

What you get on a modern server

Server-Side History

  • Recent messages arrive when you join a channel, as before
  • Scrolling to the top fetches the previous page and keeps going as you scroll, so the scrollback is as deep as the server keeps rather than stopping at what arrived on join
  • Conversations that happened while you were offline are picked up on connect, so a private message sent overnight is waiting in the morning instead of appearing only when the sender speaks again
  • Channels you are no longer in are left closed
  • Replayed messages are matched against what you already have by message ID, so nothing is shown twice
  • Needs chathistory; the control simply does not appear on servers without it

Push Notifications

  • Servers supporting the webpush extension can notify you of a highlight or private message while no connection is open
  • Built on UnifiedPush, so you choose the distributor.
  • Push payloads are decrypted on the device; the distributor relays ciphertext it cannot read
  • Off by default, and needs a distributor app installed. Enable under Settings › IRC

Message Reactions

  • React to a recent message with an emoji via /react <emoji> [n]
  • [n] targets the message n lines back (default 1)
  • Remove your reaction with /unreact <emoji> [n]
  • Reaction counts render inline under the message
  • Requires draft/message-reactions; otherwise sent as a plain notice

Typing Indicators

  • Shows when others are composing a message in a channel or query
  • Sends your own typing state as you type, stopping when you send or clear the input
  • Sent as the +typing client tag over message-tags; respects a server's CLIENTTAGDENY policy
  • Purely transient - never logged or stored

File Uploads (Filehost)

  • Attach button in the chat input when the server offers a soju.im/FILEHOST upload endpoint (soju; others via additional-isupport)
  • Uploads use your existing connection credentials - nothing extra to configure
  • The returned URL lands in the input so you can add text before sending
  • Refuses plaintext http:// filehosts on TLS connections
  • For non proxied (Tor/SOCKS) networks so the upload can never leak outside the proxy
  • Toggleable per network under IRCv3 Capabilities

Message Deletion

  • Long-press one of your own messages › Delete message to remove it for everyone
  • Uses IRCv3 draft/message-redaction (REDACT); the server relays the deletion to all clients
  • Deleted messages become (“message deleted by …”) rather than silently vanishing
  • Applied only when the server confirms, so a rejected delete never leaves your view out of sync
  • Available on servers that advertise the cap

Account Registration

  • A guided Register account dialog (overflow menu) walks through register → email verify → done via IRCv3 draft/account-registration no NickServ syntax to learn
  • Fields adapt to the server: email required, custom account names
  • Optionally save the password so SASL logs you in automatically next time
  • /register and /verify <code> drive the same flow from the command line; the account is remembered from the server's prompt
  • Registration failures come back as plain-language hints, not bare error codes
  • Falls back to a NickServ pointer on servers without the capability

Display Names & Metadata

  • Users who set a display-name have it shown beside their nick, Discord-style; a color tints their nick
  • Tap a nick to see their avatar and status; avatars follow the same rules as other remote images: previews on, HTTPS only, never on proxied profiles
  • Values are sanitised on arrival: control characters and colour codes stripped, length capped
  • A metadata editor (overflow menu, or /metadata) sets your own display name, status, colour, avatar and more; /metadata <nick> list reads someone else's
  • Uses IRCv3 draft/metadata-2; subscriptions are set up automatically on connect

HexDroid negotiates around fifty capabilities in total, and each can be switched off per network. See the full capability list for what it does with every one.

User Experience

Material 3 Interface

  • Jetpack Compose + Material Design 3
  • Dark, Light, Matrix (green-on-black), Terminal (amber), and system themes
  • Adjustable font size, chat line spacing and line height within a message
  • Open Sans, Inter, Monospace, or a custom font file, set separately for the interface and the chat area
  • Timestamps and sender nicks take square, round, angle or curly brackets, or none, with a live sample; timestamps can have their own colour
  • mIRC/ANSI colour code rendering
  • 99-colour code picker
  • Colourised nicknames
  • Landscape split-pane with draggable dividers

Notifications

  • Highlights on your nick, private messages, and custom keywords you define
  • Separate silent and sound notification channels; vibration Low / Medium / High
  • Push notifications without a background connection, on servers that support it. See the Push Notifications card above
  • See Getting Started → Staying connected to set them up

Usability

  • Link previews for images and video
  • Nick completion (@..) or nicklist mention
  • Clickable URLs and email addresses
  • Per-conversation drafts unsent text stays with the channel you typed it in, and comes back with the cursor where you left it
  • Long-press to copy message text
  • Swipe left on buffer to close / part
  • Channel topic bar (optional)
  • Lag indicator in toolbar
  • Guided intro tour for new users
  • /msg and /notice print where you typed them, as >nick< message, rather than opening a window for a one-off line
  • CTCP requests and the replies sent back to them are shown together, in the conversation you are reading
  • Settings are searchable by name, description, category or a common alternate term, in any language the app ships
  • Configurable scrollback limit (default 800)
  • Hide JOIN/PART/QUIT globally

User / Channel Actions

  • Nick action sheet: WHOIS, query, mention, DCC, ignore/unignore
  • Channel mode panel with descriptions
  • Ban/quiet/except/invex list management
  • IRCop tools: kick-ban, force join/part, broadcast

Nick & Command Completion

  • @mention popup inserts nick: at start or @nick inline
  • Tab completes the word before the cursor against the member list on a physical keyboard; repeat presses cycle the matches, Shift+Tab goes back
  • /-completion bar for all slash commands
  • NickServ/ChanServ shorthand: ns, cs, as, hs, ms, bs

Inline Media Previews

  • In-line image previews with a "Load preview" button
  • Embedded YouTube video player
  • Inline X / Twitter video playback from X post links (HLS via Media3 / ExoPlayer)
  • Images capped at 5 MB; Wi-Fi-only mode available
  • Disabled by default opt in under Settings › Media Previews

Readline Marker

  • Thin line marks where you stopped reading
  • Only appears when scrolling up past visible messages
  • Resets automatically when you reach the bottom

Ignore List

  • Per-network ignore list
  • Case-insensitive nick matching
  • /ignore nick or via Settings UI
  • Ignored messages silently hidden

Chat Logging

  • Optional per-session logging (off by default)
  • Configurable retention (default 14 days)
  • Custom folder via Android SAF
  • Server buffer logging (optional)
  • /find keyword searches scrollback & logs
  • Optional raw protocol log per network for debugging, with passwords hidden

DCC File Transfers

DCC SEND, CHAT & Passive

  • DCC send/receive files from other users
  • DCC SSEND Encrypted file transfers
  • DCC CHAT direct peer-to-peer text sessions
  • Passive / Reverse DCC HexChat-compatible token handshake; useful behind NAT
  • Turbo DCC (TSEND) no per-packet ACKs for faster throughput
  • Full IPv6 DCC addressing for SEND, CHAT and passive transfers
  • Progress tracking in the Transfers screen
  • Incoming port range configurable for NAT/firewall forwarding
  • Received files saved to Downloads (or custom folder via SAF)
  • DCC disabled by default enable in Settings

Security note

DCC establishes direct connections between clients. Only accept files from users you trust.

Passive DCC means you initiate the connection to the sender works better behind NAT/CGNAT.

Large Files (> 4 GB)

  • Files larger than 4 GB use 64-bit (8-byte) DCC acknowledgements
  • Smaller transfers keep the standard 4-byte acks
  • Both big- and little-endian ack widths are accepted for mIRC compatibility
  • Streamed transfers of unknown size (size 0) also use 64-bit acks

Resume Interrupted Transfers

  • A failed download remembers its partial bytes (peer + filename + size + path)
  • Re-offering the same file shows a Resume button beside Accept / Reject
  • Honours incoming DCC RESUME on your outgoing sends, replying DCC ACCEPT from the agreed offset
  • Partial state survives restarts, is pruned after 30 days, and tolerates corruption

Proxy/Tor

  • Transfers route through the network's configured SOCKS5 / SOCKS4a proxy
  • Works over Tor (via Orbot) alongside the IRC connection
  • See Getting Started > Proxy & Tor